package com.zm.oes.serviceimpl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zm.oes.entity.ExamManage;
import com.zm.oes.mapper.ExamManageMapper;
import com.zm.oes.service.ExamManageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ExamManageServiceImpl implements ExamManageService {

    @Autowired
    private ExamManageMapper examManageMapper;
    @Autowired
    private PaperServiceImpl paperService;

    /**
     * 私有方法的声明，它接受一个 ExamManage 对象的列表作为参数
     */
    private void setMaxScore(List<ExamManage> examManageList) {
        //for 循环，遍历传入的 examManageList 列表中的每个 ExamManage 对象
        for (ExamManage examManage : examManageList) {
            //在每次循环中，通过调用 paperService 的 getMaxScore 方法，获取当前考试管理对象的试卷最高分数，并将其设置为当前考试管理对象的总分数
            examManage.setTotalScore(paperService.getMaxScore(examManage.getPaperId()));
        }
    }

    /**
     * 查询所有的考试管理信息，并返回一个包含所有考试管理对象的列表
     */
    @Override
    public List<ExamManage> findAll() {
        //创建了一个 Page 对象 examManage，指定页码为 0（第一页）和每页大小为 9999（即查询所有记录）
        Page<ExamManage> examManage = new Page<>(0,9999);
        //调用 examManageMapper 的 findAll 方法进行查询，获取到的结果为一个 IPage<ExamManage> 对象，通过调用 getRecords() 方法得到其中的记录列表
        List<ExamManage> examManageList = examManageMapper.findAll(examManage).getRecords();
        //调用 setMaxScore 方法为每个考试管理对象设置总分数，最后返回查询结果
        setMaxScore(examManageList);
        return examManageList;
    }

    /**
     * 查询所有的考试管理信息,支持分页查询
     * 接受一个 Page 对象作为参数，用于指定查询的页码和每页的大小
     */
    @Override
    public IPage<ExamManage> findAll(Page<ExamManage> page) {
        //调用 examManageMapper 的 findAll 方法进行分页查询，获取到的结果为一个 IPage<ExamManage> 对象
        IPage<ExamManage> iPage = examManageMapper.findAll(page);
        //调用 setMaxScore 方法为其中的记录列表设置总分数，最后返回分页查询结果
        setMaxScore(iPage.getRecords());
        return iPage;
    }

    /**
     * 根据考试管理的 ID 查询对应的考试管理信息
     */
    @Override
    public ExamManage findById(Integer examCode) {
        //通过调用 examManageMapper 的 findById 方法获取到对应的 ExamManage 对象
        ExamManage examManage = examManageMapper.findById(examCode);
        //通过调用 paperService 的 getMaxScore 方法为该考试管理对象设置总分数
        examManage.setTotalScore(paperService.getMaxScore(examManage.getPaperId()));
        return examManage;
    }

    /**
     * 该方法用于删除指定 ID 的考试管理信息
     */
    @Override
    public int delete(Integer examCode) {
        // 调用 examManageMapper 的 findById 方法获取到对应的 ExamManage 对象
        ExamManage examManage = examManageMapper.findById(examCode);
        //如果该对象不存在（即返回值为 null），则直接返回 0
        if(examManage == null) {
            return 0;
        }
        //如果对象存在，那么它调用 paperService 的 deleteByPaperId 方法，删除与该考试管理相关联的试卷信息
        paperService.deleteByPaperId(examManage.getPaperId());
        //调用 examManageMapper 的 delete 方法，删除该考试管理信息，并返回删除操作的结果
        return examManageMapper.delete(examCode);
    }

    /**
     * 更新考试管理信息
     * 接收一个 ExamManage 对象作为参数，表示要更新的考试管理信息
     */
    @Override
    public int update(ExamManage exammanage) {
        //调用 examManageMapper 的 update 方法，将传入的考试管理对象传递给数据访问层进行更新操作
        //最后，返回更新操作的结果
        return examManageMapper.update(exammanage);
    }

    /**
     * 添加新的考试管理信息
     * 接收一个 ExamManage 对象作为参数，表示要添加的考试管理信息
     */
    @Override
    public int add(ExamManage exammanage) {
        //调用 examManageMapper 的 add 方法，将传入的考试管理对象传递给数据访问层进行添加操作
        return examManageMapper.add(exammanage);
    }

    @Override
    public ExamManage findOnlyPaperId() {
//        int max=999999;
//        int min=1;
//        Random random = new Random();
//        ExamManage examManage = new ExamManage();
//        examManage.setPaperId(random.nextInt(max)%(max-min+1) + min);
//        return examManage;
        return examManageMapper.findOnlyPaperId();
    }
}
